package com.powerteam.service.sys;

import com.github.pagehelper.PageInfo;
import com.powerteam.model.sys.Role;
import com.powerteam.model.sys.RoleUser;
import com.powerteam.model.sys.User;
import com.powerteam.vo.Result;
import com.powerteam.vo.sys.QueryRoleUserVO;

import java.util.List;

/**
 * 角色相关服务接口
 *
 * @author jinming.zhang
 * @version 0.0.1
 * @date 2021/12/30
 */
public interface RoleService {

    /**
     * 查询所有角色
     *
     * @param
     * @return List<Role>
     * @Author jinming.zhang
     * @Date 2022/1/12
     */
    List<Role> findAll();

    /**
     * 检查角色名称是否重复
     *
     * @param role
     * @return Result
     * @Author jinming.zhang
     * @Date 2022/1/12
     */
    Result checkRoleName(Role role);

    /**
     * 新增角色
     *
     * @param role
     * @return Result
     * @Author jinming.zhang
     * @Date 2022/1/12
     */
    Result insert(Role role);

    /**
     * 批量删除角色
     *
     * @param ids
     * @return Result
     * @Author jinming.zhang
     * @Date 2022/1/12
     */
    Result deleteByIds(List<Integer> ids);

    /**
     * 根据角色Id获取角色信息
     *
     * @param roleId
     * @return Role
     * @Author jinming.zhang
     * @Date 2022/1/12
     */
    Role findById(Integer roleId);

    /**
     * 更新角色
     *
     * @param role
     * @return Result
     * @Author jinming.zhang
     * @Date 2022/1/12
     */
    Result update(Role role);

    /**
     * 查询在某角色中的用户列表(分页)
     *
     * @param vo
     * @return PageInfo<User>
     * @Author jinming.zhang
     * @Date 2022/1/12
     */
    PageInfo<User> findUserInRole(QueryRoleUserVO vo);

    /**
     * 把用户从某角色中移除
     *
     * @param roleUser
     * @return Result
     * @Author jinming.zhang
     * @Date 2022/1/12
     */
    Result deleteRoleUser(RoleUser roleUser);

    /**
     * 查询还未加入到某角色中的用户列表(分页)
     *
     * @param vo
     * @return PageInfo<User>
     * @Author jinming.zhang
     * @Date 2022/1/12
     */
    PageInfo<User> findUserNotInRole(QueryRoleUserVO vo);

    /**
     * 分配某用户到某角色中
     *
     * @param roleUser
     * @return Result
     * @Author jinming.zhang
     * @Date 2022/1/12
     */
    Result insertRoleUser(RoleUser roleUser);

    /**
     * 批量分配菜单到某角色中
     *
     * @param roleId
     * @param menuIdList
     * @return Result
     * @Author jinming.zhang
     * @Date 2022/1/12
     */
    Result saveRoleMenu(Object roleId, Object menuIdList);
}
